//
// Created by Asus on 2025/5/13.
//

/**
 * demo 参数的默认值
 */

#include <cstdio>
#include <iostream>

int sum(int a, int b = 10) {
    return (a + b);
}

void get_value(int *num) {
    *num = 10;
    printf("%d\n", *num);
}

void get_value(int &num) {
    num = 10;
    printf("%d\n", num);
}

int main(char *argv[]) {
    int a = 100, b = 200;
    int result;

    result = sum(a, b);
    printf("result = %d\n", result);

    // 再次调用函数
    result = sum(a);
    std::cout << "Total value is :" << result << std::endl;

    // 指针调用
    printf("指针调用=======\n");
    int num = 0;
    printf("The value is :%d\n", num);
    get_value(&num);
    printf("The value is :%d\n", num);

    printf("指针调用=======\n");
    int num2 = 0;
    int *ptr_num2 = &num2;
    printf("The value is :%d\n", *ptr_num2);
    get_value(ptr_num2);
    printf("The value is :%d\n", *ptr_num2);

    // 引用调用
    printf("引用调用=======\n");
    int num3 = 0;
    printf("The value is :%d\n", num3);
    // 指针（int*）是一个独立的变量，存储的是内存地址，需要通过 * 解引用才能访问指向的值。
    // 引用（int &）是变量的 别名，本质上与原变量是同一个东西，只是名称不同。
    // int a = 10;           // 定义变量 a
    // int& ref = a;         // 定义引用 ref，绑定到变量 a（别名）
    int &ref_val = num3;

    get_value(ref_val);
    get_value(num3);
    printf("The value is :%d\n", num3);

    int num4 = 0;
    int *ptr_num4 = &num4;
    printf("The value is :%d\n", *ptr_num4);
    get_value(*ptr_num4);
    printf("The value is :%d\n", *ptr_num4);

    return 0;
}
